# -*- coding: utf-8 -*-

from sqlalchemy import create_engine, MetaData, Column, Table, ForeignKey, Integer, String, func
from sqlalchemy.sql import select
from instituicao import Instituicao
# import sqlite3
from xlrd import open_workbook,cellname
import csv

class readXls:
    '''
    cria tabela na base de dados
    '''
    def __init__(self):

        self.engine = create_engine('sqlite:///cna131fresultados-alchemy.db',
                           echo=False)

        metadata = MetaData(bind=self.engine)

        self.resultadosTable = Table('resultados', metadata,
                        Column('cod_instituicao', Integer),
                        Column('cod_curso', String),
                        Column('nome_instituicao', String),
                        Column('nome_curso', String),
                        Column('grau', String),
                        Column('vagas_iniciais', Integer),
                        Column('colocados', Integer),
                        Column('notas', Integer),
                        Column('vagas_sobra', Integer),
                        )
        self.resultadosTable.drop(self.engine, checkfirst=True)
        metadata.create_all()
    '''
    insere dados na base de dados
    '''
    def insertData(self):
        book = open_workbook('cna131fresultados.xls')
        sheet = book.sheet_by_index(0)
        #print book.encoding
        #print sheet.name
        #print sheet.nrows
        #print sheet.ncols
        exceldata = []
        for row_index in range(sheet.nrows):
            lista = []
            for col_index in range(sheet.ncols):
                #print cellname(row_index,col_index),'-',
                cellvalue = sheet.cell(row_index,col_index).value
                #print encodeValue(cellvalue)
                lista.append(cellvalue)
            exceldata.append(lista)

        #print exceldata

            
        ins_result = self.resultadosTable.insert()
        conn = self.engine.connect()

        for row in exceldata:
            # new_result = ins_result.values(cod_instituicao=3200, cod_curso=10, nome_instituicao="escola xpto", nome_curso="eng. xpto", grau="L10", vagas_iniciais=10, colocados=5, notas=15, vagas_sobra=5)
            # conn.execute(new_result)
            conn.execute('INSERT INTO resultados VALUES (?,?,?,?,?,?,?,?,?)', row)
        conn.close()


        # sel_result = select([resultados], resultados.c.cod_curso).execute()
    '''
    le registros da base de dados e retorna lista de objectos do tipo instituicoes
    '''
    def readData(self):
        self.colocadosT = select([self.resultadosTable.c.cod_instituicao,
                        self.resultadosTable.c.cod_curso,
                        self.resultadosTable.c.nome_instituicao,
                        self.resultadosTable.c.nome_curso,
                        self.resultadosTable.c.grau,
                        self.resultadosTable.c.vagas_iniciais,
                        self.resultadosTable.c.colocados,
                        self.resultadosTable.c.notas,
                        self.resultadosTable.c.vagas_sobra]).execute()

        self.resultados = []
        for x in self.colocadosT.fetchall():
            temp = Instituicao(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8])
            self.resultados.append(temp)
        return self.resultados
    
    def csvWrite(self, fileName, nAlunos):

        with open(fileName, 'wb') as f:
            writer = csv.writer(f, delimiter=',')
            temp = nAlunos[0]
            temp2 = nAlunos[1]
            for x in range(0, len(temp)):
                print xls.encodeValue(temp[x]) + " - total colocados: " + str(xls.encodeValue(temp2[x]))
                row = []
                row.append(temp[x])
                row.append("{0}".format(temp2[x]))
                writer.writerow([s.encode("utf-8") for s in row])
            f.close()

    def encodeValue(self,v):
        try:
            return v.encode('utf-8', 'ignore')
        except AttributeError:
            return v

xls = readXls()
xls.insertData()
resultados = xls.readData()

#nAlunos = Instituicao.numeroAlunosInstituicao(resultados)
nAlunos = Instituicao.numeroAlunosDistrito(resultados)
temp = nAlunos[0]
temp2 = nAlunos[1]
for x in range(0, len(temp)):
    print xls.encodeValue(temp[x]) + " - total colocados: " + str(xls.encodeValue(temp2[x]))
xls.csvWrite('resultados.csv', nAlunos)
